package com.aifund.app.entity.form.order;

import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;

@Data
public class PlaceAnOrderForm {

    /**
     * 交易对
     */
    @NotBlank(message = "交易对不能为空")
    private String symbol;

    /**
     * 买卖方向 SELL, BUY
     */
    @NotBlank(message = "买卖方向不能为空")
    private String side;

    /**
     * 持仓方向，单向持仓模式下非必填，默认且仅可填BOTH;在双向持仓模式下必填,且仅可选择 LONG 或 SHORT
     */
    private String positionSide;

    /**
     * 订单类型 LIMIT, MARKET, STOP, TAKE_PROFIT, STOP_MARKET, TAKE_PROFIT_MARKET, TRAILING_STOP_MARKET
     */
    @NotBlank(message = "订单类型不能为空")
    private String type;

    /**
     * true, false; 非双开模式下默认false；双开模式下不接受此参数。
     */

    private String reduceOnly;

    /**
     * 下单数量,使用closePosition不支持此参数。
     */
    private BigDecimal quantity;

    /**
     * 	委托价格
     */
    private BigDecimal price;


    /**
     * 用户自定义的订单号，不可以重复出现在挂单中。如空缺系统会自动赋值。必须满足正则规则 ^[\.A-Z\:/a-z0-9_-]{1,36}$
     */
    private String newClientOrderId;


    /**
     * 触发价, 仅 STOP, STOP_MARKET, TAKE_PROFIT, TAKE_PROFIT_MARKET 需要此参数
     */
    private BigDecimal stopPrice;


    /**
     * true, false；触发后全部平仓，仅支持STOP_MARKET和TAKE_PROFIT_MARKET；不与quantity合用；自带只平仓效果，不与reduceOnly 合用
     */
    private String closePosition;

    /**
     * 追踪止损激活价格，仅TRAILING_STOP_MARKET 需要此参数, 默认为下单当前市场价格(支持不同workingType)
     */
    private BigDecimal activationPrice;

    /**
     * 追踪止损回调比例，可取值范围[0.1, 5],其中 1代表1% ,仅TRAILING_STOP_MARKET 需要此参数
     */
    private BigDecimal callbackRate;

    /**
     * 有效方法
     */
    private String timeInForce;

    /**
     * stopPrice 触发类型: MARK_PRICE(标记价格), CONTRACT_PRICE(合约最新价). 默认 CONTRACT_PRICE
     */
    private String workingType;

    /**
     * 条件单触发保护："TRUE","FALSE", 默认"FALSE". 仅 STOP, STOP_MARKET, TAKE_PROFIT, TAKE_PROFIT_MARKET 需要此参数
     */
    private String priceProtect;

    /**
     * "ACK", "RESULT", 默认 "ACK"
     */
    private String newOrderRespType;

    private Long recvWindow;


}
